package com.allwees.bs.module.oms.util;

import cn.hutool.core.util.RandomUtil;
import com.allwees.bs.core.modelbase.branch.EBranchType;
import com.allwees.bs.module.oms.constant.EFmsAccountLogBsType;
import com.allwees.bs.module.oms.constant.EFmsBalanceType;
import org.apache.commons.lang3.StringUtils;

/**
 * FMS编号生成器
 *
 * @author yangylsky
 * @since 2020-01-03
 *
 */
public class FmsNoUtil {
	/**
	 * 生成账号，算法： branchType.tag(2位数字) + (branchUuid+"Account").hash后6位 + 4位随机数
	 *
	 * @param branchType
	 * @param branchUuid
	 * @return
	 */
	public static String genAccountNo(EBranchType branchType, String branchUuid) {
		return branchType.tag()
				+ StringUtils.rightPad(String.valueOf(Math.abs((branchUuid+"Account").hashCode())), 6, '0')
				+ RandomUtil.randomInt(1000, 9999);
	}

	/**
	 * 生成流水号，算法：(branchUuid+"AccountLog").hash后6位 + balanceType.type(1位数字) + bsType.type(2位数字) + 当前毫秒数后4位
	 *
	 * @param branchUuid
	 * @param balanceType
	 * @param bsType
	 * @return
	 */
	public static String genAccountLogNo(String branchUuid, EFmsBalanceType balanceType, EFmsAccountLogBsType bsType) {
		String timeStr = String.valueOf(System.currentTimeMillis());
		return StringUtils.rightPad(String.valueOf(Math.abs((branchUuid+"AccountLog").hashCode())), 6, '0')
				+ balanceType.type()
				+ StringUtils.rightPad(String.valueOf(bsType.type()), 2, '0')
				+ timeStr.substring(timeStr.length() - 4);
	}

	/**
	 * 生成结算单号，算法：branchType.tag(2位数字) + (branchUuid+"SettleStatement").hash后6位 + 当前毫秒数后4位
	 *
	 * @param branchType
	 * @param branchUuid
	 * @return
	 */
	public static String genSettleStatementNo(EBranchType branchType, String branchUuid) {
		String timeStr = String.valueOf(System.currentTimeMillis());
		return branchType.tag()
				+ StringUtils.rightPad(String.valueOf(Math.abs((branchUuid+"SettleStatement").hashCode())), 6, '0')
				+ timeStr.substring(timeStr.length() - 4);
	}
}
